/**
 * @author Andreas Lehner
 * @file   IEpcos.h
 * @brief  Declaration of the class IEpcos.
 * 
 */
#ifndef IEPCOS_H
#define IEPCOS_H

#include <string>

/**
 * @class IEpcos
 * @brief Interface used by company Epcos
 * IEpcos Interface provides functions needed by
 * the company Epcos
 */
class IEpcos {
public:
	
	/**
	 * @brief Destructor of IEpcos
	 * Pure virtual destructor so that the destructors of
	 * inherited classes are called.
	 */
	virtual ~IEpcos() {};

	/**
	 * @brief Encrypts a file with RSA algorithm and stores the
	 * result in another file
	 * @param fileName The file to be encrypted.
	 * Uses CrypterFactor to instantiate a RSA crypto algorithm 
	 * object. Opens and reads the file and encrypts it with RSA.
	 * Result is stored in a file with the name
	 * fileName plus the suffix .RSA.
	 * @throws std::Exception If an error happens when opening, reading or writing a file.
	 */
	virtual void EncryptRSA(std::string const& fileName) = 0;

	/**
	 * @brief Decrypts a file with RSA algorithm and stores the
	 * result in another file
	 * @param fileName The file to be decrypted.
	 * Uses CrypterFactor to instantiate a RSA crypto algorithm 
	 * object. Opens and reads the file and decrypts it with RSA.
	 * Result is stored in a file with the name
	 * fileName without the suffix .RSA (if it has this suffix).
	 * @throws std::Exception If an error happens when opening, reading or writing a file.
	 */
	virtual void DecryptRSA(std::string const& fileName) = 0;
};

#endif